set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROC [dbo].[p_SQL_DataScript] (
@tablename nvarchar(256)
, @where nvarchar(256)='' --值为''或null,表示全部
, @update bit = 0 --若值为0,仅生成insert语句;若值为1, 生成修改语句
)
as
begin
declare @sql nvarchar(4000)
, @sqlValues nvarchar(4000)
, @sqlUpd bit --当@update为1时,且表中存在标识字段时,此时为1,表示需要根据标识字段生成update语句;否则,即使@update为1,也是通过先delete再insert的方式进行更新数据
, @sqlUpdFieldName varchar(100) --标识字段名称
, @sqlUpdValues nvarchar(4000) --标识字段值的集合
, @sqlUpdInt bigint --标识字段值的单个值
if @where is null set @where = ''
if @update = 1
begin
if exists(select * from syscolumns where id = object_id(@tablename) and colstat=1)
set @sqlupd = 1
end
if @sqlupd = 1
begin
select @sqlUpdFieldName = [name] from syscolumns where id = object_id(@tablename) and colstat=1
if @where <> ''
begin
set @sql = 'DECLARE p_SQL_DataScript_cursor cursor for select distinct [' + @sqlUpdFieldName + '] from ' + @tablename + ' where ' + @where
exec sp_executesql @sql