我有一个视图,我想在SQL企业管理器中创建一个表,但我在运行此查询时总是收到错误:
CREATE TABLE A
AS
(SELECT top 10 FROM dbo.myView)
Run Code Online (Sandbox Code Playgroud)
到目前为止,错误是:"as'的语法错误"
视图太大了.可以使用前10名吗?
当我在网格中有结果集时,如:
SELECT 'line 1
line 2
line 3'
Run Code Online (Sandbox Code Playgroud)
要么
SELECT 'line 1' + CHAR(13) + CHAR(10) + 'line 2' + CHAR(13) + CHAR(10) + 'line 3'
Run Code Online (Sandbox Code Playgroud)
使用嵌入式CRLF,网格中的显示似乎用空格替换它们(我猜它们将显示所有数据).
问题是,如果我是代码生成脚本,我不能简单地剪切和粘贴它.我必须转换代码以打开游标并打印相关列,以便我可以从文本结果中复制和粘贴它们.
是否有更简单的解决方法来保留结果网格中的复制/粘贴操作中的CRLF?
网格有用的原因是我正在为不同列中的同一对象生成许多脚本 - 一列中的bcp,另一列中的xml格式文件,另一列中的表创建脚本等等...
在SQL Server中,如何从外键获取引用的表+列名?
注意:不是键所在的表/列,而是键所引用的键.
例:
当[FA_MDT_ID]表中的键[T_ALV_Ref_FilterDisplay].是指[T_AP_Ref_Customer].[MDT_ID]
例如在创建这样的约束时:
ALTER TABLE [dbo].[T_ALV_Ref_FilterDisplay] WITH CHECK ADD CONSTRAINT [FK_T_ALV_Ref_FilterDisplay_T_AP_Ref_Customer] FOREIGN KEY([FA_MDT_ID])
REFERENCES [dbo].[T_AP_Ref_Customer] ([MDT_ID])
GO
Run Code Online (Sandbox Code Playgroud)
[T_AP_Ref_Customer].[MDT_ID]
当[T_ALV_Ref_FilterAnzeige].[FA_MDT_ID]作为输入给出时我需要得到
我希望能够将带有标识列的表中的数据插入到SQL Server 2005中的临时表中.
TSQL看起来像:
-- Create empty temp table
SELECT *
INTO #Tmp_MyTable
FROM MyTable
WHERE 1=0
...
WHILE ...
BEGIN
...
INSERT INTO #Tmp_MyTable
SELECT TOP (@n) *
FROM MyTable
...
END
Run Code Online (Sandbox Code Playgroud)
上面的代码使用标识列创建了#Tmp_Table,然后插入失败并显示错误"只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'#Tmp_MyTable'中标识列的显式值."
TSQL中是否有一种方法可以删除临时表中列的标识属性而不显式列出所有列?我特别想使用"SELECT*",以便在将新列添加到MyTable时代码将继续工作.
我相信删除和重新创建列将改变其位置,使得无法使用SELECT*.
更新:
我已尝试在一个响应中建议使用IDENTITY_INSERT.它不起作用 - 见下面的repro.我究竟做错了什么?
-- Create test table
CREATE TABLE [dbo].[TestTable](
[ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
CONSTRAINT [PK_TestTable] PRIMARY KEY CLUSTERED
(
[ID] ASC
)
)
GO
-- Insert some data
INSERT INTO TestTable
(Name)
SELECT 'One'
UNION …Run Code Online (Sandbox Code Playgroud) 在"脚本到"选项下,您可以选择脚本创建为您想要的任何内容.有没有办法使用类似的方法为视图获取匹配的表结构?
如何在SQL(MS SQL)中实现这一点
谢谢
好的:让我清楚一下,尝试实现的是使用EXCEPT子句生成动态select语句.
例如:从@table中选择col1,col2,col3,除了从@table中选择col1,col2,col2
所以我的结果集总是基于@table而不同
进一步下来我想在CTE中使用这个@table
with filteredData as(从temptable中选择col1,col2 - (在上面创建))
下面是目前为止的代码:
DECLARE @TABLENAME VARCHAR(200) = 'SERVICE_DELIVERY_LOCATION';
DECLARE @COLCOUNT INT ;
DECLARE @TEMPCOLNAME VARCHAR(500) ;
DECLARE @SELECTCOLUMNS VARCHAR(5000)='';
DECLARE @EXCEPTSTATEMENT VARCHAR(5000)='' ;
---------------------------------------------------------------------------------------------------
--CASE: GET COMMON_COLUMNS COLUMNS OF SOURCE AND DESTINATION TABLE
---------------------------------------------------------------------------------------------------
DECLARE @COMMON_COLUMNS TABLE( COLUMN_NAME VARCHAR(500))
INSERT INTO @COMMON_COLUMNS
SELECT SOURCE.COLUMN_NAME FROM SCD_SOURCE.INFORMATION_SCHEMA.COLUMNS SOURCE
INNER JOIN SCD_DESTI.INFORMATION_SCHEMA.COLUMNS DESTI ON SOURCE.COLUMN_NAME = DESTI.COLUMN_NAME
---------------------------------------------------------------------------------------------------
--CASE: GET PK COLUMNS OF SOURCE TO MAP TO DESTINATION IN CASE WHERE NEED …Run Code Online (Sandbox Code Playgroud) 我需要一种方法来一般地获取一个表并将其数据复制到一个新表 - 基本上与SELECT*INTO在常规SQL Server中所做的相同.有没有办法在SQL Azure中执行此操作?此时我只有现有的和新的表名.
我有一个非常复杂的表格,我想在进行一些修改时暂时备份.通常,我只是做以下事情:
SELECT *
INTO temp_User
FROM dbo.[User] AS u
Run Code Online (Sandbox Code Playgroud)
不幸的是我正在使用Azure,它似乎不支持:
消息40510,级别16,状态1,行2语句此版本的SQL Server不支持"SELECT INTO"语句.
有没有办法将此功能重新创建到函数中?我可以通过编写表格,创建它然后使用select语句插入数据来做到这一点,但考虑到我使用Azure的频率,以及我需要在这个区域中处理多少个数据库,这是非常笨拙的.
我在 SQL Server 2008 R2 中有一个全局临时表。我需要一个生成脚本的方式与我们在 SSMS 中通过“脚本表作为”->“创建到”生成脚本的方式相同。
我实际上并没有创建临时表。我只是想使用它的模式来创建一个表,这样我就可以在事务期间将数据永久存储在我的表中。
我正在开发一个查询,将表结构从链接服务器复制到本地数据库中,以获得通用的表列表.
但是由于某种原因,十进制数据类型将更改为数字.在选择过度链接的服务器时,似乎只会发生这种情况.但是,当我在本地系统上尝试相同时,我无法复制问题.
发生此错误的环境本地和链接服务器的SQL版本不同(分别为10,12).不确定这是否相关.
如果有人能够对此有所了解,那将非常感激.谢谢.
查询如下:
WHILE (select count(*) from @tbls) > 0
BEGIN
SELECT @id = 0, @tblname = '', @cols = '', @colSets = ''
select top 1 @id = ID, @tblname = TableName, @PKField = PKField, @DataType = DataType from @tbls
if exists (select 1 from sys.tables where name = @tblname)
begin
delete from @tbls where ID = @id
Continue;
end
exec('select * into '+ @tblname +' from [linkedserver].MyDatabase.dbo.'+@tblname + ' where 1 = 0')
delete from @tbls …Run Code Online (Sandbox Code Playgroud) 我们允许使用我们的用途来更改报表的某些视图,以及不基于我们在应用程序中跟踪的某些应用程序字段元数据的内容.可以在运行时创建这些字段.我有一个标准流程来在添加或删除字段时更改视图.我现在需要以编程方式执行此操作,这意味着我需要能够拉出当前的Alter视图脚本,进行修改,然后针对数据库执行它.最后两个步骤很简单,但第一部分给了我一些麻烦.
抛开设计决策(因为在这个特定实例中它们不在我手中).我想知道如何检索Sql server Management Studio用于View-> Edit命令的Alter视图脚本.
我需要与该命令完全相同的输出,因为我的脚本中有注释挂钩,允许我的编辑发生.
相关问题,但不是我想要的.
如何以编程方式检索与SQL Server Management Studio gui返回的源相同的SQL Server存储过程源?
我有一个SQL Server表.我需要在另一个数据库中创建相同的表.我怎样才能看到创建表的Create Table查询是什么,所以我可以运行它.
CREATE TABLE ..
Run Code Online (Sandbox Code Playgroud) 我想从现有数据库创建一个数据库,而不从中获取任何数据(仅模式)。我知道,我可以使用 SQL Server Management Studio 创建一个用于此目的的脚本,但我需要一些动态执行此操作的事务 SQL 脚本
sql ×8
sql-server ×7
t-sql ×5
azure ×2
.net ×1
ddl ×1
foreign-keys ×1
formatting ×1
metadata ×1
ssms ×1
temp-tables ×1
view ×1