操作系统:Windows 7; Python 2.7.3使用Python GUI Shell
我正在尝试通过Python阅读网站,有几位作者使用urllib和urllib2库.为了将网站存储在变量中,我看到了类似的方法:
import urllib
import urllib2
g = "http://www.google.com/"
read = urllib2.urlopen(g)
Run Code Online (Sandbox Code Playgroud)
最后一行在120秒后生成错误:
> Traceback (most recent call last): File "<pyshell#27>", line 1, in
> <module>
> r = urllib2.urlopen(o) File "C:\Python27\lib\urllib2.py", line 126, in urlopen
> return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 400, in open
> response = self._open(req, data) File "C:\Python27\lib\urllib2.py", line 418, in _open
> '_open', req) File "C:\Python27\lib\urllib2.py", line 378, in _call_chain
> result = func(*args) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用FOR XML PATH('')TSQL 按特定列对列值进行分组.这是两种情况下的结果(请注意,没有XML代码 - 即:SELECT * FROM @xml- 与XML代码相同):
Class | Animals
=================================
Asteroidea | Starfish
Mammalia | Dog
Mammalia | Cat
Mammalia | Coyote
Reptilia | Crocodile
Reptilia | Lizard
Run Code Online (Sandbox Code Playgroud)
根据这篇文章和这篇文章(请注意,第二篇文章遗漏了GROUP BY,我不确定作者如何设法在没有它的情况下解决这个问题 - 我已经尝试过它只生成所有值),语法应该是如下图所示:
DECLARE @xml TABLE(
Animal VARCHAR(50),
Class VARCHAR(50)
)
INSERT INTO @xml
VALUES ('Dog','Mammalia')
, ('Cat','Mammalia')
, ('Coyote','Mammalia')
, ('Starfish','Asteroidea')
, ('Crocodile','Reptilia')
, ('Lizard','Reptilia')
SELECT x1.Class
, STUFF((SELECT ',' + x2.Animal AS [text()]
FROM @xml …Run Code Online (Sandbox Code Playgroud) 我查看了Microsoft的SQL Server站点,用Google搜索了这个,甚至检查了Stack Overflow的答案(注意最后两个,这将在一天左右的时间内发生变化),但我找不到以下SELECT查询的内容:
SELECT @@DEF_SORTORDER_ID
Run Code Online (Sandbox Code Playgroud)
在SQL Server中使用了什么/如何使用(2008R2;它似乎在2012年和2005年可用)?
在SQL Server 2008 R2中,用户可以通过右键单击数据库,选择Tasks和来编写包含数据的表Generate Scripts.将弹出一个向导,询问用户他们想要什么(多个表,一个表等)以及一些高级选项(允许用户同时获取表模式和数据); 对于问题,请参阅这个有用的帖子(在"The Handy"下).
不幸的是,SQL Server没有生成这些脚本的脚本,有时我们必须编写一些包含其中所有数据的表.我不是每次都手动执行此操作,而是认为让C#应用程序为测试表调用这些进程并为包含所有数据的表生成脚本会更容易,将其保存为本地文件.
当我使用它时SqlConnection,我没有看到执行此类任务的选项(尽管它可能与其他东西有关).这个向导如何访问?
更新:在初步回答之后,我认为这是不可能的,所以我为那些更熟悉TSQL的人制定了一个有趣的解决方案.我创建了一个类似于下面的存储过程:
CREATE PROCEDURE usp_ScriptTableAndData
AS
BEGIN
CREATE TABLE ScriptTemp(
Value VARCHAR(8000)
)
INSERT INTO ScriptTemp
SELECT '/* Build the Reference Table */'
INSERT INTO ScriptTemp
SELECT 'USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Table](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Reference] [varchar](50) NULL,
[TableDate] [datetime] NOT NULL,
[Display] [bit] NULL
)
SET …Run Code Online (Sandbox Code Playgroud) 注意:请参阅 SQL Fiddle 上详细说明的示例,或查看以下代码:,因为这些DECLARE @XML variable示例在尝试从 XML 列实际获取 XML 数据并用于非 XML 行时混淆了语法:
CREATE TABLE ##xml (
ID TINYINT IDENTITY(1,1),
Value XML
)
INSERT INTO ##xml (Value)
VALUES ('<Animals key="zoo" fish="22" dogs="0" birds="4" />')
, ('<Animals key="house" fish="0" dogs="1" birds="2" />')
, ('<Animals key="business" fish="0" dogs="0" birds="12" />')
SELECT *
FROM ##xml
SELECT nodes.child.value('key[1]', 'VARCHAR(50)')
FROM ##xml.Value.nodes('Animal') AS nodes(child)
-- Errors here, though the syntax looks correct
DROP TABLE ##xml
Run Code Online (Sandbox Code Playgroud)
我收到错误,“无效的列名 '##xml'。XMLDT 方法 'nodes' 只能在 xml 类型的列上调用”,即使我试图查询 …
我收到一个错误:
将varchar值'INSERT INTO TableRowCount(IntFieldID,DecimalField)SELECT'转换为数据类型int时,转换失败
使用以下代码:
DECLARE @start INT -- @start is an INT
SET @start = 1 -- INT
DECLARE @sql NVARCHAR(MAX)
SET @sql = 'INSERT INTO TableRowCount (IntFieldID, DecimalField)
SELECT ' + @start +', COUNT(*)
FROM dbo.somewhere' -- location is irrelevant
EXECUTE(@sql) -- this is where it fails
Run Code Online (Sandbox Code Playgroud)
如果我删除IntFieldID和@start,它将与一个插入工作(虽然它失败的目的).我已经尝试过包含一个SELECT CAST(' + @start + ' AS INT),这似乎有点多余,因为@start它INT已经是一个(INT作为一个INT),但这也不起作用.我也尝试从一个N' DYNAMIC-SQL开始,它没有用,我尝试使用三个'''围绕一切(没有'工作),并在我在线阅读的几个地方,响应建议将变量放在字符串中,这产生了错误:
必须声明标量变量@start
(毫不奇怪,因为这听起来不正确).
我已经阅读了几篇关于TSQL身份错误的帖子,并且一直在使用SEQUENCE.但是,我很想知道重置表中SEQUENCE的ID值.举个例子:
CREATE SEQUENCE Inc
AS INT
START WITH 1
INCREMENT BY 1
CYCLE
CACHE
-- Quick ability to redo everything if needed:
-- DROP SEQUENCE Inc
-- Our table grabs the next sequence for our ID field:
CREATE TABLE SequenceID(
NewIDField INT DEFAULT NEXT VALUE FOR Inc,
Name VARCHAR(100)
)
INSERT INTO SequenceID (Name)
VALUES ('John')
, ('Tiffany')
, ('Bob')
, ('Jessica')
SELECT *
FROM SequenceID
-- We remove Bob:
DELETE FROM …Run Code Online (Sandbox Code Playgroud) 注意:我的办公室不允许我查看YouTube和其他几个可能对这个问题有答案的网站(它们被阻止),这就是谷歌搜索答案没有产生结果的原因.
ComboBox代码参考:在这里找到
在我的上面C# Form,我用一个数据库中的表填充了一个ComboBox(见下面的代码),它正确返回了相应的值和函数:
public Form1()
{
InitializeComponent();
// Connection
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "CONNECTION STRING" // shortened for security and convenience
// Fill ComboBox with SQL Values
conn.Open();
SqlCommand cmbTables = new SqlCommand("SELECT name FROM sys.tables", conn);
SqlDataReader read = cmbTables.ExecuteReader();
DataTable cmbData = new DataTable();
cmbData.Columns.Add("name", typeof(string));
cmbData.Load(read);
cmb1.DisplayMember = "name";
cmb1.DataSource = cmbData;
conn.Close();
}
Run Code Online (Sandbox Code Playgroud)
在ComboBox加载表(工作)之后,应用程序然后选择一个表并单击一个加载表的按钮,该按钮被选中.这是代码错误的地方:
private void button1_Click(object sender, EventArgs e)
{
using (var connection = Utilities.GetConnection()) …Run Code Online (Sandbox Code Playgroud) 在阅读调优TSQL查询时,我已经看到了关于避免(或小心)WHERE条款中的函数的建议.但是,在某些情况下 - 比如从今天开始需要动态日期的搜索 - 我很好奇是否可以进一步调整查询?例如,下面的查询使用DATEADD当前日期的函数,这允许用户随时获取过去30天的正确信息:
SELECT *
FROM Zoo..Transportation
WHERE ArrivalDate BETWEEN DATEADD(DD,-30,GETDATE()) AND GETDATE()
Run Code Online (Sandbox Code Playgroud)
如果我试图消除该函数,DATEADD我可以声明一个变量,该变量将拉动该时间,然后使用存储在变量中的设置值查询数据,例如:
DECLARE @begin DATE
SET @begin = DATEADD(DD,-30,GETDATE())
SELECT *
FROM Zoo..Transportation
WHERE ArrivalDate BETWEEN @begin AND GETDATE()
Run Code Online (Sandbox Code Playgroud)
但是,执行计划和统计数据显示完全相同的读取,扫描和批次成本.
在这些动态数据实例中(例如,使用今天的日期作为起点),我们如何减少或消除WHERE条款中函数的使用?
我是C#的新手.我试图循环一个短数组,其中数组中的字符串元素放在网站搜索的末尾.代码:
int n = 1;
string[] s = {"firstitem","seconditem","thirditem"}
int x = s.Max(); // note, from my research this should return the maximum value in the array, but this is the first error
x = x + 1
while (n < x)
{
System.Diagnostics.Process.Start("www.website.com/" + b[0]);
b[]++; // this also generates an error "identifier expected"
}
Run Code Online (Sandbox Code Playgroud)
我的编码,逻辑或两者都是错的.根据我读过的内容,我应该能够在数组中获取最大值(作为int),然后添加到数组值,同时WHILE循环在网站末尾添加数组中的每个值(然后停止).请注意,在第一个错误上,我尝试使用不同的编码方式,如下所示:
int x = Convert.ToInt32(s.Max);
Run Code Online (Sandbox Code Playgroud)
但是,它会产生过载错误.如果我正确读取内容,MAX应该在序列中找到最大值.
sql-server ×5
t-sql ×5
c# ×3
arrays ×1
combobox ×1
for-xml-path ×1
loops ×1
python ×1
python-2.7 ×1
sequences ×1
smo ×1
ssms ×1
urllib ×1
urllib2 ×1
xml ×1